package com.example.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
// 使用反射机制进行调用

public class Test2 {
    public static void main(String[] args) throws Exception{
        // 1.获取类
        Class<?> aClass = Class.forName("com.example.reflect.someService");

        // 2.获取方法
        Method method = aClass.getDeclaredMethod("doSome");

        // 3.调用方法
        Object o = aClass.newInstance();
        Object ret = method.invoke(o);    // 进入invoke()得知返回值
        System.out.println(ret);
    }

    public static void main1(String[] args) throws Exception{
        // 使用反射机制进行调用
        // 1.获取类
        Class<?> aClass = Class.forName("com.example.reflect.someService");

        // 2.获取方法
        Method method = aClass.getDeclaredMethod("doSome", String.class,int.class);

        // 3.调用方法
        // 四个要素,哪个对象(Object)，哪个方法(method)，传什么参数(String,int)，返回什么值(Object)

        // Object object = aClass.newInstance();无参构造,这个过时了

        Constructor<?> con = aClass.getConstructor();
        Object obj = con.newInstance();
        Object ret = method.invoke(obj,"李四",10);    // 进入invoke()得知返回值
        System.out.println(ret);
    }

}
